function PDE = PDE_struct_2d(exmple_index)
switch exmple_index
    case 1
        PDE.index = exmple_index;
        PDE.err = true;
        PDE.u = @(x,y) x.*y.*(1-0.5*x).*(1-y).*exp(x+y);
        PDE.dudx = @(x,y) 0.5*(y.*exp(y+x).*(x.^2-2.0).*(y-1.0));
        PDE.dudy = @(x,y) 0.5*(x.*exp(y+x).*(x-2.0).*(y+y.^2-1.0));
        PDE.cor = @(x,y) ones(size(x));
        PDE.f = @(x,y)-y.*(1-y).*(1-x-0.5*(x.^2)).*exp(x+y)-x.*(1-0.5*x).*(-3*y-y.^2).*exp(x+y);
        PDE.domain = [-1, 1, -1, 1];
        PDE.bdary = [0, 0, 0, 0];
    case 2
        PDE.index = exmple_index;
        PDE.err = true;
        PDE.u = @(x,y) exp(x+y);
        PDE.dudx = @(x,y) exp(x+y);
        PDE.dudy = @(x,y) exp(x+y);
        PDE.cor = @(x,y) ones(size(x));
        PDE.f = @(x,y) -2*exp(x+y);
        PDE.domain = [-1, 1, -1, 1];
        PDE.bdary = [1, 0, 0, 0];
    case 3
        PDE.index = exmple_index;
        PDE.err = true;
        PDE.u = @(x,y) exp(x+y);
        PDE.dudx = @(x,y) exp(x+y);
        PDE.dudy = @(x,y) exp(x+y);
        PDE.cor = @(x,y) ones(size(x));
        PDE.f = @(x,y) -2*exp(x+y);
        PDE.r = @(x,y) ones(size(x));
        PDE.domain = [-1, 1, -1, 1];
        PDE.bdary = [2, 0, 0, 0];
    case 4
        PDE.index = exmple_index;
        PDE.err = false;
        PDE.dudx = @(x,y) 0;
        PDE.dudy = @(x,y) 0;
        PDE.cor = @(x,y) ones(size(x));
        PDE.f = @(x,y) zeros(size(x));
        PDE.domain = [0, 2, 0, 2];
        PDE.bdary = [0, 1, 0, 1];
        PDE.D = @(x,y,k)  (k == 3) * 100 + (k == 1) * 50;
    otherwise
        error("Invalid PDE exmple_index");
end
if PDE.err
    fprintf("PDE example: %d (有解析解的问题)\n", exmple_index);
else
    fprintf("PDE example: %d (Benchmark)\n", exmple_index);
end
fprintf("PDE domain: xmin,xmax,ymin,ymax\n");
disp(PDE.domain);
fprintf("PDE boundary: bottom,right,top,left (0=Dirichlet,1=Neumann,2=Robin)\n");
disp(PDE.bdary);
end